//package cn.qzsoft.collect.server.modules.ludong.asphalt.socket;
//
//import cn.qzsoft.collect.server.common.utils.MapToBeanUtils;
//import cn.qzsoft.collect.server.modules.ludong.asphalt.entity.AsphaltConcreteCollectionEntity;
//import cn.qzsoft.collect.server.modules.ludong.asphaltzhjd.service.AsphaltDataService;
//import com.alibaba.fastjson.JSON;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Component;
//
//import java.io.IOException;
//import java.net.InetSocketAddress;
//import java.net.ServerSocket;
//import java.nio.ByteBuffer;
//import java.nio.channels.SelectionKey;
//import java.nio.channels.Selector;
//import java.nio.channels.ServerSocketChannel;
//import java.nio.channels.SocketChannel;
//import java.nio.charset.Charset;
//import java.util.Map;
//import java.util.Set;
//
//@Component
//public class SocketServer {
//    // 解码buffer
//    private Charset cs = Charset.forName("UTF-8");
//
//    // 接受数据缓冲区
//    private static ByteBuffer sBuffer = ByteBuffer.allocate(1024);
//
//    // 发送数据缓冲区
//    private static ByteBuffer rBuffer = ByteBuffer.allocate(1024);
//
//    // 选择器
//    private static Selector selector;
//
//    @Autowired
//    private AsphaltDataService asphaltDataService;
//
//    /**
//     * 启动socket服务，开启监听
//     *
//     * @param port
//     */
//    public void startSocketServer(int port) {
//        try {
//            // 打开通信通道
//            ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
//            // 设置为非阻塞
//            serverSocketChannel.configureBlocking(false);
//            // 获取套接字
//            ServerSocket serverSocket = serverSocketChannel.socket();
//            // 绑定端口号
//            serverSocket.bind(new InetSocketAddress(port));
//            // 打开监听
//            selector = Selector.open();
//            // 将通信信道注册到监听器
//            serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT);
//            // 监听器一直监听，如果客户端有请求就会进入响应的时间处理
//            while (true) {
//                selector.select(); // select()一直阻塞直到相关事件发生或超时
//                Set<SelectionKey> selectionKeys = selector.selectedKeys(); // 监听到事件
//                for (SelectionKey key : selectionKeys) {
//                    handle(key);
//                }
//                selectionKeys.clear(); // 清除处理过的事件
//            }
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//    }
//
//    /**
//     * 处理不同事件
//     *
//     * @param selectionKey
//     * @throws IOException
//     */
//    private void handle(SelectionKey selectionKey) throws Exception {
//        ServerSocketChannel serverSocketChannel = null;
//        SocketChannel socketChannel = null;
//        String requestMsg = "";
//        int count = 0;
//        if (selectionKey.isAcceptable()) {
//            // 每有客户端连接，即注册通信信道为可读
//            serverSocketChannel = (ServerSocketChannel) selectionKey.channel();
//            socketChannel = serverSocketChannel.accept();
//            socketChannel.configureBlocking(false);
//            socketChannel.register(selector, SelectionKey.OP_READ);
//            System.out.println("客户端连接成功");
//        } else if (selectionKey.isReadable()) {
//            socketChannel = (SocketChannel) selectionKey.channel();
//            rBuffer.clear();
//            count = socketChannel.read(rBuffer);
//            // 读取数据
//            if (count > 0) {
//                rBuffer.flip();
//                requestMsg = String.valueOf(cs.decode(rBuffer).array());
//                //处理存储数据
//                try {
//                    Map mapTypes = JSON.parseObject(requestMsg);
//                    System.out.println("收到参数==============" + requestMsg);
//                    AsphaltConcreteCollectionEntity entity = MapToBeanUtils.mapToCapitalObject(mapTypes,AsphaltConcreteCollectionEntity.class);
//                    asphaltDataService.insert(entity);
//                }catch (Exception e) {
//
//                }
//                //保存到数据库
//
//            }
//        }
//    }
//}
